var gulp = require('gulp');
var $ = require('gulp-load-plugins')();
var del = require('del');
var minifyCss = require('gulp-minify-css');
var minifyHtml = require('gulp-htmlmin');
var uglify = require('gulp-uglify');
var runSequence = require('run-sequence');
var assetRev = require('gulp-asset-rev');
var concat = require('gulp-concat');
var cmdPack = require('gulp-cmd-pack');
var combo = require('gulp-seajs-combo');
// 压缩js
function gulpScripts(app_name) {
    return gulp.src([app_name + '/**/*.js'])
        .pipe(assetRev())                    //配置版本号
        // .pipe(concat('allocationStock.js'))
       // .pipe(uglify({
            //mangle: true,//类型：Boolean 默认：true 是否修改变量名
         //   mangle: { except: ['require', 'exports', 'module', '$'] }//排除混淆关键字
        //}))
        .pipe(gulp.dest("dist/js"));//复制到目标文件路径
    // return gulp.src([app_name + '/**/*.js']) //源文件下的所有js
    //     .pipe(assetRev())                    //配置版本号
    //     .pipe($.uglify())                    //进行压缩，如果需要合并也可加上合并的代码
    //     .pipe(gulp.dest("dist/js"));//复制到目标文件路径
}

function gulpStyles(app_name) {
    return gulp.src([app_name + '/**/*.css'])
        .pipe(assetRev())
        // .pipe($.minifyCss())//压缩css
        .pipe(gulp.dest("dist/css"));
}

function gulpImages(app_name) {
    return gulp.src([app_name + '/**/images/*'])
        .pipe(gulp.dest("dist/img"));   //复制所有图片到目标文件夹
}

function gulpRevHtml(app_name) {
    gulp.src([app_name + '/**/*.html'])   //源文件下面是所有html
        .pipe(assetRev())                 //配置引用的js和css文件，需要的话也可以用minifyHtml压缩html文件
        // .pipe(minifyHtml({collapseWhitespace: true}))    //进行压缩
        .pipe(gulp.dest('dist/src'));    //打包到目标文件夹路径下面
}

gulp.task('app_scripts', function(){
    gulpScripts("file/js");
});
gulp.task('app_styles', function(){
    gulpStyles("file/css");
});
gulp.task('app_images',function(){
     gulpImages("app");
});
gulp.task('app_rev', ['app_styles', 'app_scripts'], function(){
    gulpRevHtml("file/src");
});
gulp.task('clean', del.bind(null, ['app_dist'], {
    force: true
}));
gulp.task("beike", function() {
    runSequence('clean', ["app_images", "app_rev"]);
});
gulp.task('default',['app_rev',]);
// var gulp = require('gulp'),
//     gutil = require('gulp-util'),
//     uglify = require('gulp-uglify'),
//     watchPath = require('gulp-watch-path'),
//     combiner = require('stream-combiner2'),
//     sourcemaps = require('gulp-sourcemaps'),
//     minifycss = require('gulp-minify-css'),
//     autoprefixer = require('gulp-autoprefixer'),
//     less = require('gulp-less'),
//     sass = require('gulp-ruby-sass'),
//     imagemin = require('gulp-imagemin'),
//     handlebars = require('gulp-handlebars'),
//     wrap = require('gulp-wrap'),
//     declare = require('gulp-declare');
// var dist = 'dist';
// var yargs = require('yargs').argv,//获取运行gulp命令时附加的命令行参数
//     clean = require('gulp-clean'),//清理文件或文件夹
//     replace = require('gulp-replace-task'),//对文件中的字符串进行替换
//     browserSync = require('browser-sync'),//启动静态服务器
//     transport = require("gulp-seajs-transport"),//对seajs的模块进行预处理：添加模块标识
//     concat = require("gulp-seajs-concat"),//seajs模块合并
//     merge = require('merge-stream'),//合并多个流
//     CONTEXT_PATH = 'blog/seajs/',
//     replace_patterns = [
//         {
//             match: 'CONTEXT_PATH',
//             replacement: yargs.r ? CONTEXT_PATH : ''
//         }
//     ];
// var handleError = function (err) {
//     var colors = gutil.colors;
//     console.log('\n');
//     gutil.log(colors.red('Error!'));
//     gutil.log('fileName: ' + colors.red(err.fileName));
//     gutil.log('lineNumber: ' + colors.red(err.lineNumber));
//     gutil.log('message: ' + err.message);
//     gutil.log('plugin: ' + colors.yellow(err.plugin));
// };
// // gulp.task('watchjs', function () {
// //     gulp.watch('js/**/*.js', function (event) {
// //         var paths = watchPath(event, 'js/', 'dist/js/');
// //         /*
// //         paths
// //             { srcPath: 'src/js/log.js',
// //               srcDir: 'src/js/',
// //               distPath: 'dist/js/log.js',
// //               distDir: 'dist/js/',
// //               srcFilename: 'log.js',
// //               distFilename: 'log.js' }
// //         */
// //         gutil.log(gutil.colors.green(event.type) + ' ' + paths.srcPath);
// //         gutil.log('Dist ' + paths.distPath);
// //         var combined = combiner.obj([
// //             gulp.src(paths.srcPath),
// //             sourcemaps.init(),
// //             uglify(),
// //             sourcemaps.write('./'),
// //             gulp.dest(paths.distDir)
// //         ]);
// //         combined.on('error', handleError);
// //     });
// // });
// // gulp.task('uglifyjs', function () {
// //     var combined = combiner.obj([
// //         gulp.src('js/**/*.js'),
// //         sourcemaps.init(),
// //         uglify(),
// //         sourcemaps.write('./'),
// //         gulp.dest('dist/js/')
// //     ]);
// //     combined.on('error', handleError);
// // });
// //拷贝模式：src/js到dist/js
// gulp.task('script_copy', function () {
//     return gulp.src('js/**/*', {base: 'js'})
//         .pipe(replace({
//             patterns: replace_patterns
//         }))
//         .pipe(gulp.dest(dist + '/js'));
// });
// //seajs合并模式
// gulp.task("seajs", function () {
//     return merge(
//         gulp.src('js/!(lib)/**/*.js', {base:'js'})
//             .pipe(transport())
//             .pipe(concat({
//                 base: 'js'
//             }))
//             .pipe(replace({
//                 patterns: replace_patterns
//             }))
//             .pipe(gulp.dest(dist + '/js')),
//         gulp.src(['js/**/*.js', 'js/common.js'], {base: 'js'})
//             .pipe(replace({
//                 patterns: replace_patterns
//             }))
//             .pipe(gulp.dest(dist + '/js'))
//     );
// });
// //js压缩混淆，条件是生产环境下才会真正的压缩混淆
// //另外它依赖于seajs或script_copy任务：
// //生产环境执行seajs任务，开发环境执行script_copy任务
// gulp.task('script', ['seajs'], function (cb) {
//     if (yargs.r) {
//         return gulp.src([
//             dist + '/js/**/*.js',
//             dist + '/js/**/*.js'
//         ], {base: dist + '/js'})
//             .pipe(uglify({
//                 mangle: {
//                     except: ['require', 'exports', 'module']//这几个变量不能压缩混淆，否则会引发seajs的一些意外问题
//                 }
//             }))
//             .pipe(gulp.dest(dist + '/js'));
//     } else {
//         cb();
//     }
// });
// //前面一个任务将压缩后的代码都放到了dist/js_tmp下
// //这个任务将压缩后的代码从dist/js_tmp还原到dist/js
// // gulp.task('script_restore', ['script_uglify'], function (cb) {
// //     if (yargs.r) {
// //         return gulp.src([
// //             dist + '/js_tmp/**/*'
// //         ], {base: dist + '/js_tmp'})
// //             .pipe(gulp.dest(dist + '/js'));
// //     } else {
// //         cb();
// //     }
// // });
// // //最终的script任务
// // gulp.task('script', ['script_restore'], function (cb) {
// //     if (yargs.r) {
// //         return gulp.src([dist + '/js_tmp'], {read: false})
// //             .pipe(clean());
// //     } else {
// //         cb();
// //     }
// // });
// gulp.task('watchcss', function () {
//     gulp.watch('css/**/*.css', function (event) {
//         var paths = watchPath(event, 'css/', 'dist/css');
//         gutil.log(gutil.colors.green(event.type) + ' ' + paths.srcPath);
//         gutil.log('Dist ' + paths.distPath);
//         gulp.src(paths.srcPath)
//             .pipe(sourcemaps.init())
//             .pipe(autoprefixer({
//               browsers: 'last 2 versions'
//             }))
//             .pipe(minifycss())
//             .pipe(sourcemaps.write('./'))
//             .pipe(gulp.dest(paths.distDir));
//     });
// });
// gulp.task('minifycss', function () {
//     gulp.src('css/**/*.css')
//         .pipe(sourcemaps.init())
//         .pipe(autoprefixer({
//           browsers: 'last 2 versions'
//         }))
//         .pipe(minifycss())
//         .pipe(sourcemaps.write('./'))
//         .pipe(gulp.dest('dist/css/'));
// });
// // gulp.task('watchless', function () {
// //     gulp.watch('src/less/**/*.less', function (event) {
// //         var paths = watchPath(event, 'src/less/', 'dist/css/');
// //         gutil.log(gutil.colors.green(event.type) + ' ' + paths.srcPath);
// //         gutil.log('Dist ' + paths.distPath);
// //         var combined = combiner.obj([
// //             gulp.src(paths.srcPath),
// //             sourcemaps.init(),
// //             autoprefixer({
// //               browsers: 'last 2 versions'
// //             }),
// //             less(),
// //             minifycss(),
// //             sourcemaps.write('./'),
// //             gulp.dest(paths.distDir)
// //         ]);
// //         combined.on('error', handleError);
// //     });
// // });
// // gulp.task('lesscss', function () {
// //     var combined = combiner.obj([
// //             gulp.src('src/less/**/*.less'),
// //             sourcemaps.init(),
// //             autoprefixer({
// //               browsers: 'last 2 versions'
// //             }),
// //             less(),
// //             minifycss(),
// //             sourcemaps.write('./'),
// //             gulp.dest('dist/css/')
// //         ]);
// //     combined.on('error', handleError);
// // });
// // gulp.task('watchsass',function () {
// //     gulp.watch('src/sass/**/*', function (event) {
// //         var paths = watchPath(event, 'src/sass/', 'dist/css/');
// //         gutil.log(gutil.colors.green(event.type) + ' ' + paths.srcPath);
// //         gutil.log('Dist ' + paths.distPath);
// //         sass(paths.srcPath)
// //             .on('error', function (err) {
// //                 console.error('Error!', err.message);
// //             })
// //             .pipe(sourcemaps.init())
// //             .pipe(minifycss())
// //             .pipe(autoprefixer({
// //               browsers: 'last 2 versions'
// //             }))
// //             .pipe(sourcemaps.write('./'))
// //             .pipe(gulp.dest(paths.distDir));
// //     });
// // });
// // gulp.task('sasscss', function () {
// //         sass('src/sass/')
// //         .on('error', function (err) {
// //             console.error('Error!', err.message);
// //         })
// //         .pipe(sourcemaps.init())
// //         .pipe(minifycss())
// //         .pipe(autoprefixer({
// //           browsers: 'last 2 versions'
// //         }))
// //         .pipe(sourcemaps.write('./'))
// //         .pipe(gulp.dest('dist/css'));
// // });
// gulp.task('watchimage', function () {
//     gulp.watch('img/**/*', function (event) {
//         var paths = watchPath(event,'img/','dist/img');
//         gutil.log(gutil.colors.green(event.type) + ' ' + paths.srcPath);
//         gutil.log('Dist ' + paths.distPath);
//         gulp.src(paths.srcPath)
//             .pipe(imagemin({
//                 progressive: true
//             }))
//             .pipe(gulp.dest(paths.distDir));
//     });
// });
// gulp.task('image', function () {
//     gulp.src('img/**/*')
//         .pipe(imagemin({
//             progressive: true
//         }))
//         .pipe(gulp.dest('dist/img'));
// });
// // gulp.task('watchcopy', function () {
// //     gulp.watch('src/fonts/**/*', function (event) {
// //         var paths = watchPath(event,'src/', 'dist/');
// //         gutil.log(gutil.colors.green(event.type) + ' ' + paths.srcPath);
// //         gutil.log('Dist ' + paths.distPath);
// //         gulp.src(paths.srcPath)
// //             .pipe(gulp.dest(paths.distDir));
// //     });
// // });
// // gulp.task('copy', function () {
// //     gulp.src('src/fonts/**/*')
// //         .pipe(gulp.dest('dist/fonts/'));
// // });
// // gulp.task('watchtemplates', function () {
// //     gulp.watch('src/templates/**/*', function (event) {
// //         var paths = watchPath(event, 'src/', 'dist/');
// //         gutil.log(gutil.colors.green(event.type) + ' ' + paths.srcPath);
// //         gutil.log('Dist ' + paths.distPath);
// //         var combined = combiner.obj([
// //             gulp.src(paths.srcPath),
// //             handlebars({
// //               // 3.0.1
// //               handlebars: require('handlebars')
// //             }),
// //             wrap('Handlebars.template(<%= contents %>)'),
// //             declare({
// //               namespace: 'S.templates',
// //               noRedeclare: true
// //             }),
// //             gulp.dest(paths.distDir)
// //         ]);
// //         combined.on('error', handleError);
// //     });
// // });
// // gulp.task('templates', function () {
// //         gulp.src('src/templates/**/*')
// //         .pipe(handlebars({
// //           // 3.0.1
// //           handlebars: require('handlebars')
// //         }))
// //         .pipe(wrap('Handlebars.template(<%= contents %>)'))
// //         .pipe(declare({
// //           namespace: 'S.templates',
// //           noRedeclare: true
// //         }))
// //         .pipe(gulp.dest('dist/templates'));
// // });
// gulp.task('default', ['script', 'watchcss',  'watchimage']);//'watchless', 'watchsass', 'watchcopy', 'watchtemplates'